//
// Copyright (c) 2011 Alex Nesterenko
//

#include "nane/core/crt/std/StdWriteFile_.h"

#include <cassert>

namespace nane 
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    StdWriteFile::StdWriteFile( FileSystem::Implementation* _creator, FILE* _interface, const char* _filename )
        : StdFileBase( _interface, _filename )
        , SubSystemProduct<FileSystem::Implementation, StdWriteFile, IWriteFile>( _creator )
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    StdWriteFile::~StdWriteFile()
    {
        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool StdWriteFile::flush()
    {
        return std::fflush(m_interface) == 0;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    uint32 StdWriteFile::write( const byte* _data, uint32 _count )
    {
        // file must be opened
        assert( m_interface != NULL );
        std::size_t bytesWritten = 0;
        bytesWritten = std::fwrite(_data, sizeof(byte), _count, m_interface);
        return static_cast<uint32>(bytesWritten);        
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
